package com.gjy.scheduling.monitor.processor;


import lombok.Builder;
import lombok.Data;

/**
 * 用于动态管理定时任务线程池的对象
 */
@Data
@Builder
public class SchedulerTaskInfo implements DsTaskInfo {
    private String id;

    private String cron;

    private boolean isValid;

    private String sql1;

    private String sql2;

    private Integer type;

    private String reference;

    private String processId;

    private String contactId;
    private String expectValue;
    private String alarmContent;
    private String emailTitle;

    /**
     * 这个函数是一个重写方法，用于判断是否需要更改任务信息。如果传入的oldTaskInfo是SchedulerTaskInfo类型，
     * 则比较cron、isValid、type、contactId、expectValue等属性是否与当前对象相等，同时还比较了sql1、sql2等属性的组合。
     * 如果不相等，则需要更改任务信息。如果传入的类型不是SchedulerTaskInfo类型，则抛出异常。
     * <p>
     * 判定定时任务变化的条件：后续可以继续在isChange扩展额外的关联属性
     *
     * @param oldTaskInfo: 旧任务信息
     * @return:
     * @author: linbd
     * @date: 2024/1/9 14:37
     */
    @Override
    public boolean isChange(DsTaskInfo oldTaskInfo) {
        if (oldTaskInfo instanceof SchedulerTaskInfo) {
            final SchedulerTaskInfo obj = (SchedulerTaskInfo) oldTaskInfo;
            return !this.cron.equals(obj.cron) || this.isValid != obj.isValid || this.type != obj.getType()
                    || !this.contactId.equals(obj.getContactId()) || !this.expectValue.equals(obj.getExpectValue())
                    || !this.alarmContent.equals(obj.getAlarmContent()) || !this.emailTitle.equals(obj.getEmailTitle())
                    || !this.reference.equals(obj.getReference()) || !this.processId.equals(obj.getProcessId())
                    || !(this.sql1 + this.sql2).equals(obj.getSql1() + obj.getSql2());
        } else {
            throw new IllegalArgumentException("Not Support SchedulerTestTaskInfo type");
        }
    }

}
